<?php

/**
 * Amazon ECS4.0のRST API用の親クラス
 *
 * 出展元：http://www.itmedia.co.jp/enterprise/articles/0502/28/news003.html
 * 利用例：http://www.itmedia.co.jp/enterprise/articles/0502/28/news003_3.html
 * AWS情報：http://aws.typepad.com/aws_jp/
 * @set_keyword : キーワード検索のためのRESTパラメータをセットします
 * @connect : ECSサーバに接続して、XMLを取得します
 * @loadXML : ECSから取得した商品情報を、SimpleXMLに格納します
 */

class cAmazonAPI {
    // ECSから取得した商品情報XMLを格納
    var $xml;

    // ECS 4.0を利用するのに必要な情報
    var $host        = "webservices.amazon.co.jp";
    var $base_path   = "/onca/xml?Service=AWSECommerceService";
    var $sub_id      = "自分のSubscription ID"; // ECS登録時に取得したSubscription ID
    var $aid         = "自分のアソシエイトID"; // アソシエイト・プログラム登録時のアソシエイトID
    var $version     = "2004-10-04";
    var $contentType = "text/xml";

    // RESTパラメータを指定するPath部分
    var $path = "";

    /**
     *  キーワードと商品種別、ページを指定して検索
     */
    function set_keyword($keyword,$index=Blended,$page=1) {
        //キーワードをクエリ用にURLエンコード
        $keyword = urlencode($keyword);

        //キーワード検索のためのRESTパラメータをセット
        $this->path = $this->base_path
            . "&SubscriptionId=" . $this->sub_id
            . "&AssociateTag=" . $this->aid
            . "&Version=" . $this->version
            . "&ContentType=" . $this->contentType
            . "&Operation=ItemSearch"
            . "&ResponseGroup=Small,Offers,Images,BrowseNodes,SalesRank"
            . "&Keywords=" . $keyword
            . "&SearchIndex=" . $index
            . "&Page=" . $page;

        return TRUE;
        
    }

    /**
     *  PHPのSocket機能を利用して、ECS 4.0サーバに接続
     */
    function connect () {
        $sockPointer = @fsockopen($this->host, 80, $errno, $errstr,6); 

        if( !$sockPointer ) {
            return FALSE;
        }
        else { 
            stream_set_timeout($sockPointer, 6, 0);

            fputs ($sockPointer, "GET $this->path HTTP/1.0\r\nHost: $this->host\r\n\r\n");
            fputs ($sockPointer, "User-Agent: ECS-Sample/1.0\n\n"); //任意のUser-Agent
            fputs ($sockPointer, "Keep-Alive: 300\n\n");
            fputs ($sockPointer, "Connection: Keep-Alive\n\n");
            fputs ($sockPointer, "Referer: http://www.itmedia.co.jp/\n\n"); //自分のサイトのURL

            $buf = "";
            $response = fgets($sockPointer);
            if (substr_count($response, "200 OK") > 0){
                while (!feof($sockPointer)) {
                    $buf = $buf . fread($sockPointer,4096);
                }
            } else {
                $result = FALSE;
            }
                $result = TRUE;
            }
            fclose($sockPointer);

            if ($result) {
                $doc = substr($buf,strpos($buf,"\r\n\r\n")+4);
                return $doc;
            }
            else {
                return FALSE;
            }
        }
    }

    /**
     *  ECS 4.0にRESTリクエストを発行して、XMLを取得
     */
    function loadXML() {
        $doc = $this->connect();

        if(!$doc) return FALSE;
        if (substr($doc,0,5) != "<?xml") return FALSE;

        // Simple XMLに商品情報XMLを格納
        $this->xml = @simplexml_load_string($doc);	

        return TRUE;
    }

    /**
     * アダルト商品判別のメソッド
     */
    function checkAdult($item){
        
        if ($item->ItemAttributes->Format == "アダルト") return TRUE;

        if( ( strpos($item->BrowseNodes->BrowseNode[0]->Name,"アダルト") === false)
        || (strpos($item->BrowseNodes->BrowseNode[0]->Name,"ヤングアダルト") !== false) ) {
            if(strpos($item->BrowseNodes->BrowseNode[0]->Ancestors,"アダルト") === false
            || (strpos($item->BrowseNodes->BrowseNode[0]->Ancestors,"ヤングアダルト") !== false) ) {
                if(strpos($item->BrowseNodes->BrowseNode[0]->Children,"アダルト") === false 
                || (strpos($item->BrowseNodes->BrowseNode[0]->Children,"ヤングアダルト") !== false) ) {
                    $isAdult = FALSE;
                }
                else {
                    $isAdult = TRUE;
                }
            }
            else {
                $isAdult = TRUE;
            }
        }
        else {
            $isAdult = TRUE;
        }

        return $isAdult;

    }

}

?>